Author: Gao Pengbing (nbgao)
Email: nbgao@126.com
import numpy as np
import matplotlib.pyplot as plt
import skimage
import warnings
%matplotlib inline
warnings.filterwarnings('ignore')
img = [_ for i in range(6)]
img_gaussian = [_ for i in range(6)]
img_pepper = [_ for i in range(6)]
for i in range(1,6):
file_path = 'Image/image'+str(i)+'.jpg'
img[i] = plt.imread(file_path)
img_gaussian[i] = np.uint8(skimage.util.random_noise(img[i], mode='gaussian', var=0.01)*255)
img_pepper[i] = np.uint8(skimage.util.random_noise(img[i], mode='pepper')*255)
plt.figure(figsize=(18,6))
plt.subplot(131)
plt.imshow(img[i])
plt.title('Origin')
plt.axis('off')
plt.subplot(132)
plt.imshow(img_gaussian[i])
plt.title('Gaussian Noise')
plt.axis('off')
plt.subplot(133)
plt.imshow(img_pepper[i])
plt.title('pepper')
plt.axis('off')
plt.show()
编写KNN均值滤波对二种噪声图像进行去噪,测试3组不同的参数,输出结果图像,并分析实验效果
def Nearest(arr, x, k):
a = arr.copy()
# a = np.delete(a, len(a)//2)
n = len(a)
d = np.zeros_like(a)
for i in range(n):
d[i] = abs(a[i]-x)
# print(d)
d_map = np.array(list(zip(a, d)))
d_map = d_map[d_map[:,1].argsort()]
a_k = d_map[:k, 0]
p = np.uint8(np.mean(a_k))
# p = np.uint8(np.mean(arr))
return p
def KNN_AverageFilter(I, k):
[h, w, C] = I.shape[:3]
G = I.copy()
L = 0
if(k<=9):
L = 1
elif(k<=25):
L = 2
elif(k<=49):
L = 3
for i in range(L,h-L):
for j in range(L,w-L):
for c in range(C):
T = I[i-L:i+L+1, j-L:j+L+1, c]
G[i,j,c] = Nearest(T.ravel(), I[i,j,c], k)
return G
for i in range(1,6):
gaussian_ave_5 = KNN_AverageFilter(img_gaussian[i], 5)
gaussian_ave_7 = KNN_AverageFilter(img_gaussian[i], 7)
gaussian_ave_9 = KNN_AverageFilter(img_gaussian[i], 9)
plt.figure(figsize=(12, 12*img_gaussian[i].shape[0]/img_gaussian[i].shape[1]))
plt.subplot(221)
plt.imshow(img_gaussian[i])
plt.title('Gaussian')
plt.axis('off')
plt.subplot(222)
plt.imshow(gaussian_ave_5)
plt.title('KNN-average K=5')
plt.axis('off')
plt.subplot(223)
plt.imshow(gaussian_ave_7)
plt.title('KNN-average K=7')
plt.axis('off')
plt.subplot(224)
plt.imshow(gaussian_ave_9)
plt.title('KNN-average K=9')
plt.axis('off')
plt.show()
for i in range(1,6):
pepper_ave_5 = KNN_AverageFilter(img_pepper[i], 5)
pepper_ave_7 = KNN_AverageFilter(img_pepper[i], 7)
pepper_ave_9 = KNN_AverageFilter(img_pepper[i], 9)
plt.figure(figsize=(12, 12*img_pepper[i].shape[0]/img_pepper[i].shape[1]))
plt.subplot(221)
plt.imshow(img_pepper[i])
plt.title('Pepper')
plt.axis('off')
plt.subplot(222)
plt.imshow(pepper_ave_5)
plt.title('KNN-average K=5')
plt.axis('off')
plt.subplot(223)
plt.imshow(pepper_ave_7)
plt.title('KNN-average K=7')
plt.axis('off')
plt.subplot(224)
plt.imshow(pepper_ave_9)
plt.title('KNN-average K=9')
plt.axis('off')
plt.show()
编写KNN中值滤波对二种噪声图像进行去噪,测试3组不同的参数,输出结果图像,并分析实验效果
def NearestMedian(arr, x, k):
# a = arr.copy()
# # a = np.delete(a, len(a)//2)
# n = len(a)
# d = np.zeros_like(a)
# for i in range(n):
# d[i] = abs(a[i]-x)
# d_map = np.array(list(zip(a, d)))
# d_map = d_map[d_map[:,1].argsort()]
# a_k = d_map[:k, 0]
# p = a_k[k//2]
a = arr[arr[:].argsort()]
p = a[len(a)//2]
return p
def MedianFilter(I, k):
[h, w, C] = I.shape[:3]
G = I.copy()
L = 0
if(k<=9):
L = 1
elif(k<=25):
L = 2
elif(k<=49):
L = 3
for i in range(L,h-L):
for j in range(L,w-L):
for c in range(C):
T = I[i-L:i+L+1, j-L:j+L+1, c]
G[i,j,c] = NearestMedian(T.ravel(), I[i,j,c], k)
return G
for i in range(1,6):
# gaussian_med_5 = MedianFilter(img_gaussian[i], 5)
# gaussian_med_7 = MedianFilter(img_gaussian[i], 7)
gaussian_med_9 = MedianFilter(img_gaussian[i], 9)
plt.figure(figsize=(12, 6*img_gaussian[i].shape[0]/img_gaussian[i].shape[1]))
plt.subplot(121)
plt.imshow(img_gaussian[i])
plt.title('Gaussian')
plt.axis('off')
plt.subplot(122)
plt.imshow(gaussian_med_9)
plt.title('Median Filter')
plt.axis('off')
# plt.subplot(223)
# plt.imshow(gaussian_med_5)
# plt.title('Median K=5')
# plt.axis('off')
# plt.subplot(224)
# plt.imshow(gaussian_med_7)
# plt.title('Median K=7')
# plt.axis('off')
plt.show()
for i in range(1,6):
# pepper_med_5 = MedianFilter(img_pepper[i], 5)
# pepper_med_7 = MedianFilter(img_pepper[i], 7)
pepper_med_9 = MedianFilter(img_pepper[i], 9)
plt.figure(figsize=(12, 6*img_pepper[i].shape[0]/img_pepper[i].shape[1]))
plt.subplot(121)
plt.imshow(img_pepper[i])
plt.title('Pepper')
plt.axis('off')
plt.subplot(122)
plt.imshow(pepper_med_9)
plt.title('Median Filter')
plt.axis('off')
# plt.subplot(223)
# plt.imshow(pepper_med_5)
# plt.title('Median K=5')
# plt.axis('off')
# plt.subplot(224)
# plt.imshow(pepper_med_7)
# plt.title('Median K=7')
# plt.axis('off')
plt.show()